#ifndef __BASE_H
#define __BASE_H

#include "../build.h"
#include "../utils/byte_view.h"
#include "../utils/error.h"
#include <string.h>
#include <type_traits>
#include <utility>

namespace serialize {

template <typename T>
inline constexpr bool is_int =
    std::is_same_v<T, uint8_t> || std::is_same_v<T, int8_t> ||
    std::is_same_v<T, uint16_t> || std::is_same_v<T, int16_t> ||
    std::is_same_v<T, uint32_t> || std::is_same_v<T, int32_t>;

template <typename T>
inline constexpr bool is_8bit =
    std::is_same_v<T, uint8_t> || std::is_same_v<T, int8_t>;

template <typename T>
inline constexpr bool is_16bit =
    std::is_same_v<T, uint16_t> || std::is_same_v<T, int16_t>;

template <typename T>
inline constexpr bool is_32bit =
    std::is_same_v<T, uint32_t> || std::is_same_v<T, int32_t>;

template <typename T>
inline constexpr bool is_error = std::is_same_v<T, utils::Error>;

template <typename T>
inline constexpr bool is_byte_view = std::is_same_v<T, utils::ByteView>;

} // namespace serialize

#endif
